home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / sun3.md / RCS / gmcount.s,v < prev    next >
Text File  |  1990-02-16  |  4KB  |  293 lines

  1. head     1.3;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @| @;
  7.  
  8.  
  9. 1.3
  10. date     90.02.16.14.09.05;  author rab;  state Exp;
  11. branches ;
  12. next     1.2;
  13.  
  14. 1.2
  15. date     89.03.02.17.16.55;  author rab;  state Exp;
  16. branches ;
  17. next     1.1;
  18.  
  19. 1.1
  20. date     89.02.22.18.10.37;  author rab;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @@
  27.  
  28.  
  29. 1.3
  30. log
  31. @Changed local labels to gnu format.
  32. @
  33. text
  34. @    .data
  35.     .asciz    "    @@(#)gmcount.s    1.1    86/02/03    Copyr 1983 Sun Micro"
  36. |    Copyright (c) 1983 by Sun Microsystems, Inc.
  37.         .globl _profiling
  38. _profiling:
  39.     .byte    3
  40.     .text
  41.     .globl    mcount
  42. mcount:
  43.     tstb    _profiling    |are we recursivly called?
  44.     jne    2f
  45.     movb    #1,_profiling
  46.     movl    sp@@, d1        | snag our return address
  47.     movl    a6@@(4), d0    | snag HIS return address
  48.     subl    _s_lowpc,d0    | subtract out profiling origin
  49.     cmpl    _s_textsize,d0    | is it cool?
  50.     jhi    3f
  51.     andb    #0xfe,d0    | make sure halfword subscript even
  52.     movl    _froms,a1
  53.     addl    d0,a1        | frompc = &froms[(frompc-s_lowpc)/
  54.                             |       (HASHFRACTION*sizeof(*froms))]
  55.     tstw    a1@@
  56.     jne    4f
  57.     movl    _tos,a0        | bucket chain is empty.
  58.     addqw    #1,a0@@(8)
  59.     moveq    #0,d0
  60.     movw    a0@@(8),d0
  61.     movw    d0,a1@@
  62.     cmpl    _tolimit,d0    | are there too many now?
  63.     jcc    overflow
  64.     mulu    #10,d0
  65.     addl    d0,a0        | form address of bucket.
  66.     movl    d1,a0@@        | callee address here
  67.     movl    #1,a0@@(4)    | called once.
  68.     clrw    a0@@(8)        | no links.
  69.     jra    3f        | all done.
  70. 4:
  71.     movw    a1@@,d0        | we've seen this caller before
  72.     mulu    #10,d0
  73.     addl    _tos,d0
  74.     movl    d0,a0        | top = &tos[ *frompc ]
  75. 5:
  76.     |               we now have a list of who our caller has
  77.     |              called. If we're on it, just bump our count.
  78.     |              Else add us to the list.
  79.     movl    a0@@,d0
  80.     cmpl    d1,d0
  81.     jne    6f
  82.     addql    #1,a0@@(4)    | found !
  83.     jra    3f
  84. 6:
  85.     tstw    a0@@(8)
  86.     jne    7f
  87.     movl    _tos,a1        | fell off the end of the list -- add us.
  88.     movw    a1@@(8),d0
  89.     addqw    #1,d0
  90.     movw    d0,a1@@(8)
  91.     movw    a1@@(8),a0@@(8)
  92.     moveq    #0,d0
  93.     movw    a0@@(8),d0
  94.     cmpl    _tolimit,d0    | too many buckets?
  95.     jcc    overflow
  96.     mulu    #10,d0
  97.     addl    _tos,d0
  98.     movl    d0,a0
  99.     movl    d1,a0@@        | callee pc
  100.     movl    #1,a0@@(4)    | count of times called.
  101.     clrw    a0@@(8)        | link to next.
  102.     jra    3f        | finished.
  103. 7:
  104.     movw    a0@@(8),d0    | loop-the-loop
  105.     mulu    #10,d0
  106.     addl    _tos,d0
  107.     movl    d0,a0
  108.     jra    5b
  109. 3:
  110.     clrb    _profiling
  111. 2:
  112.     rts            | go home
  113. overflow:
  114.     .data1
  115. 8:
  116.     .asciz    "mcount: tos overflow\12"
  117.     .text
  118.     pea    22:w    | sizeof message
  119.     pea    8b    | message
  120.     pea    2:w    | stderr
  121.     jsr    _write
  122.     addw    #12,sp
  123.     rts
  124.  
  125. @
  126.  
  127.  
  128. 1.2
  129. log
  130. @*** empty log message ***
  131. @
  132. text
  133. @d11 1
  134. a11 1
  135.     jne    2$
  136. d17 1
  137. a17 1
  138.     jhi    3$
  139. d23 1
  140. a23 1
  141.     jne    4$
  142. d36 2
  143. a37 2
  144.     jra    3$        | all done.
  145. 4$:
  146. d42 1
  147. a42 1
  148. 5$:
  149. d48 1
  150. a48 1
  151.     jne    6$
  152. d50 2
  153. a51 2
  154.     jra    3$
  155. 6$:
  156. d53 1
  157. a53 1
  158.     jne    7$
  159. d69 2
  160. a70 2
  161.     jra    3$        | finished.
  162. 7$:
  163. d75 2
  164. a76 2
  165.     jra    5$
  166. 3$:
  167. d78 1
  168. a78 1
  169. 2$:
  170. d82 1
  171. a82 1
  172. 8$:
  173. d86 1
  174. a86 1
  175.     pea    8$    | message
  176. a90 67
  177.  
  178.  
  179. #if 0
  180.     .data
  181.     .even
  182.     .globl    _end
  183. curbrk:
  184.     .long    _end
  185. pageSize:
  186.     .long   0
  187. initialized:
  188.     .long   0
  189.  
  190.     .text
  191.     .globl    _brk,_sbrk
  192. _brk:
  193.     tstl    initialized
  194.     jne     2$
  195.     movl    #1, initialized
  196.     pea     pageSize
  197.     jbsr     _Vm_PageSize
  198.     subql   #1, pageSize
  199. 2$:
  200.     movl    sp@@(4),d0
  201.     cmpl    _minsbrk,d0
  202.     jgt     3$
  203.     clrl    d0
  204.     rts
  205. 3$:
  206.         movl    _minsbrk, d1
  207.     subql   #1, _minsbrk
  208.     movl    _pageSize, d2
  209.     notl    d2
  210.     andl    d2, d1
  211.     andl    d0, d2
  212.     cmpl    d1, d2
  213.     jeq     $5
  214.     movl    d0, d2
  215.     subl    _minsbrk, d0
  216.     movel   d0, sp@@-
  217.     movel   _minsbrk, sp@@-
  218.     jbsr    _Vm_CreateVA
  219.     tstl    d0
  220.     jne     4$
  221.     movl    d2, _minsbrk
  222.     clrl    d0
  223.     movl    sp@@+, d2
  224.     rts
  225. $4:
  226.     movl    #-1, d0
  227.     movl    sp@@+, d2
  228.     rts
  229.  
  230. _sbrk:
  231.     movl    sp@@(4),d0
  232.     movl    curbrk,d1
  233.     addl    d1,d0
  234.     movl    d1,sp@@(4)
  235.     movl    d0,sp@@-
  236.     jbsr    _brk
  237.     addql    #4,sp
  238.     tstl    d0
  239.     bnes    1$
  240.     movl    sp@@(4),d0
  241. 1$:
  242.     rts
  243. #endif
  244. @
  245.  
  246.  
  247. 1.1
  248. log
  249. @Initial revision
  250. @
  251. text
  252. @d92 66
  253. a157 38
  254. |    .data
  255. |    .even
  256. |    .globl    _end
  257. |curbrk:
  258. |    .long    _end
  259. |
  260. |    .text
  261. |    SYS_brk  =  17
  262. |    .globl    _brk,_sbrk
  263. |_brk:
  264. |    movl    sp@@(4),d0
  265. |    cmpl    _minsbrk,d0
  266. |    jge    1$
  267. |    movl    _minsbrk,sp@@(4)
  268. |1$:
  269. |    pea    SYS_brk:w
  270. |    trap    #0
  271. |    jcs    cerror
  272. |    movl    sp@@(4),curbrk
  273. |    clrl    d0
  274. |    rts
  275. |
  276. |_sbrk:
  277. |    tstb    sp@@(-12)
  278. |    movl    sp@@(4),d0
  279. |    movl    curbrk,d1
  280. |    addl    d1,d0
  281. |    movl    d1,sp@@(4)
  282. |    movl    d0,sp@@-
  283. |    bsrs    _brk
  284. |    addql    #4,sp
  285. |    tstl    d0
  286. |    bnes    1$
  287. |    movl    sp@@(4),d0
  288. |1$:
  289. |    rts
  290. |
  291. |
  292. @
  293.